Copyright(C) 1994 Terumasa KODAKA , Takeshi KONO
■HD BIOS
HD BIOSの概要
o HD BIOSは、ハードディスク・MO・CD-ROM等にアクセスするためのBIOSである。
HD BIOSでは、AHの下位4ビットで動作を指定し、上位4ビットでその動作に
付随した機能の指定などを行う。このため、HD BIOSでは下位4ビットの
値を元に昇順に配列してある。
用語 SASI(SASI I/F, SASI HD, SASI BIOS)
o SASI型は、PC-9800で最初にサポートされたハードディスクである。
本書では、SASI用ハードディスクインターフェースをSASI I/F、SASI型
ハードディスクドライブをSASI HD、これらを制御するBIOSをSASI BIOSと
呼ぶ。
o SASI HDは、SASI I/Fに2台まで接続できる。
SASI HDの容量は、NEC製品では1台あたり40Mバイトが最大だが、
サードパーティ製品にはそれ以上の容量を持つものがある。
o 拡張スロットに実装するSASI I/Fには、PC-9801-07・27がある。
SASI I/Fを内蔵している機種、内蔵ドライブを追加可能な機種もある。
o SASI BIOSは通常、ノーマルモード(PC-9801Mを除く)ではD7000〜D7FFFhに、
PC-9801MではD6000〜D6FFFhに配置される。ハイレゾモードでは
本体BIOS ROM(セグメントF800h)内に含まれている。
用語 SCSI(SCSI I/F, SCSI HD, SCSI BIOS)
o SCSIは、大容量のハードディスクや各種の周辺機器を接続するために
導入された。
本書では、SCSI用ハードディスクインターフェースをSCSI I/F、SCSI型
ハードディスクドライブをSCSI HD、これらを制御するBIOSをSCSI BIOSと
呼ぶ。
o SCSI I/F上のBIOS ROM内には、SCSI BIOSとともに、SCSI機器全般を
制御できるSCSIインターフェース共通BIOSも含まれている。
SCSI BIOSとSCSIインターフェース共通BIOSは、両方ともINT 1Bhで
呼び出す。DA/UAの値により、どちらかが選択される。
o SCSI I/Fには、SCSI機器を最大7台まで接続できる。ただし、MS-DOSでは
ソフトウェア上の仕様の制限で、ハードディスクは最大4台までしか認識
しない。
SCSI I/Fには、MOやCD-ROM(SCSI対応)を接続することもできる。これらの
機器にも、SCSI BIOSでアクセス可能。
o 拡張スロットに実装するSCSI I/Fには、PC-9801-55・55L・55U・92,
PC-H98-B03・B12がある。
SCSI I/Fを内蔵している機種、内蔵ドライブを追加可能な機種もある。
SCSI I/Fには、CD-ROM接続用にPC-9801-55よりも前に発売されたPC-9801-50
という製品があるが、本書では取り上げない。
o MS-DOSは、バージョン3.3以降の製品からSCSI HDに対応している。MS-DOS 3.1
以前の製品は、SCSI HDに対応していない。
3.5"MOは、バージョン5.0以降で対応している。
o SCSI BIOSは通常、ノーマルモード(PC-9801・E・F・Mを除く)ではDC000〜DCFFFh
に、PC-9801・E・F・MではD4000〜D4FFFhに配置される。ハイレゾモードでは
EC000〜ECFFFhに配置される。
ただし、PC-H98-B03・B12、およびそれと互換性のあるH98内蔵SCSIのBIOSは、
セットアップ時にROMアドレスが決定される。また、BIOSのサイズは
8Kバイトである。
u PC-9801-55・55L・55U,PC-H98-B03(および互換内蔵型SCSI I/F)では、SCSIの
INQUIRYコマンドで得られるベンダ名の先頭3バイトが"NEC"でないハード
ディスクは接続できない。MOやCD-ROMにはこのような制限はない。
PC-9801-92,PC-H98-B12(および互換内蔵型SCSI I/F)では、ベンダ名
チェックは行わない。
o SASI I/Fと共存させることが可能。
用語 ESDI(ESDI I/F, ESDI HD, ESDI BIOS)
o ESDIは、PC-H98の内蔵ドライブで導入された。
本書では、ESDI用ハードディスクインターフェースをESDI I/F、ESDI型
ハードディスクドライブをESDI HD、これらを制御するBIOSをESDI BIOSと
呼ぶ。
o ESDI型H98内蔵ハードディスクには、PC-H98/70-E01・E02・E03,PC-H98S/8-E01が
ある。
PC-H98/70-E01・03,PC-H98S/8-E01には、外部にSASI HDを増設することが
できる。このSASI HDはESDI BIOSが制御する。
o MS-DOSは、バージョン3.3B以降の製品からESDI HDに正式対応している。実際
にはバージョン3.3(PS98-013)から対応。MS-DOS 3.1以前の製品は、
ESDI HDに対応していない。
o ESDI BIOSは、セットアップ時にROMアドレスが決定される。BIOSのサイズは
8Kバイトである。
o SASI I/F、SCSI I/Fと共存させることが可能。
用語 IDE(IDE I/F, IDE HD, IDE BIOS, IDE CD-ROM)
o IDEは、98NOTEに内蔵するための2.5インチハードディスクで最初に導入
された。その後、性能面・価格面での優位性から、デスクトップでも
採用された。内蔵型のみ存在する。
本書では、IDE用ハードディスクインターフェースをIDE I/F、IDE型
ハードディスクドライブをIDE HD、これらを制御するBIOSをIDE BIOSと
呼ぶ。
o IDE HDは98NOTE,PC-9821,PC-9801UR・US・BA・BX・BA2・BS2・BX2,PC-H98Tに
内蔵できる。
PC-9821Bp・Bs・Be,PC-9801BA2・BS2・BX2では、2台目のIDEが使用可能。その
他の機種では1台だけ使用できる。
2台目のIDEは、ハードディスクかCD-ROMかを選択できる。IDE I/Fに接続
されたCD-ROMをIDE CD-ROMと呼ぶ。
o IDE BIOSは通常、ノーマルモードではD8000〜DBFFFhに配置される。ハイレゾ
モードではE6000〜E9FFFhに配置される。
98NOTEを除くIDEサポート機では、IDE HD/CD-ROMを内蔵したときだけ
IDE BIOSが出現する。
98NOTEのIDE BIOSは、RAMドライブやシステム制御用のBIOSと同じアドレスに
存在する。
o BIOSレベルではSASI BIOSと互換性がある。40Mバイト以下の容量であれば、
バージョン3.1以前のMS-DOSでも使用できる。40Mバイトを超える容量の
場合は、MS-DOS 3.3以降が必要。
o SCSI I/Fと共存させることが可能。ESDIとIDEを両方内蔵できる機種はない。
IDE BIOSが出現している場合には、SASI I/Fは使用できない。
用語 リニアセクタアドレス
o アクセスするセクタを指定する方法のひとつ。ディスク内の全セクタに
対して、0から始まる連続した番号をつけ、その番号でセクタを指定する
方法。一次元の配列(配列の1要素が1セクタ)のようなイメージでアクセス
できる。
u MOやCD-ROMにアクセスする場合は、リニアセクタアドレスを用いる。
用語 絶対セクタアドレス
o アクセスするセクタを指定する方法のひとつ。セクタを指定するとき、
シリンダ番号・ヘッド番号・トラック内のセクタ番号を用いる。
u MOやCD-ROMにアクセスする場合は、絶対セクタアドレスを使用しないほうが
良い。
用語 DA/UA
o DISK BIOSでは、アクセスする装置名を指定するために、DA/UA
(Device Address/Unit Address)と呼ばれる値を用いる。
上位4bitのDAで装置の種類を指定する。下位4bitのUAで同種の装置のなかの
何台目のドライブかを指定する。
たとえば、SASI I/Fに接続された1台目のHDDを指定する場合はDA/UA=80h、
2台目を指定する場合はDA/UA=81hとする。
SCSI I/Fに接続されたデバイスの場合は、UAにSCSI IDと同じ値を指定する。
o HD BIOSでは、アクセスするセクタを指定する方法が2種類
(リニアセクタアドレスと絶対セクタアドレス)用意されている。
同じドライブに対して、セクタ指定の方法ごとに、DAの値が割り当てられて
いる
(表:「HD BIOSのセクタ指定方法とDA/UAの対応」参照)。
たとえば、SCSI ID 0のHDDでリニアセクタアドレスでアクセスするには、
DA/UA=20hを指定する。絶対セクタアドレスでアクセスするには、DA/UA=A0h
を指定する。IDEの2台目のHDDにリニアセクタアドレスでアクセスするには、
DA/UA=01hを指定する。
表 HD BIOSのセクタ指定方法とDA/UAの対応
----------------+-------------+-------------
\セクタ指定方法|リニアセクタ |絶対セクタ
インターフェース種別 \| アドレス| アドレス
----------------+-------------+-------------
SASI・ESDI・IDE | 00〜03h | 80〜83h
SCSI | 20〜26h | A0〜A6h
----------------+-------------+-------------
* n=装置番号
o 参考のため、DA/UAの一覧を表「全DA/UAとデバイスの対応一覧」に示す。
表 全DA/UAとデバイスの対応一覧
-------+---------------------------------------------------------------
DA/UA |デバイス
-------+---------------------------------------------------------------
00h |SASI・IDE HD #1(リニアセクタアドレス指定)
01h |SASI・IDE HD/CD-ROM #2(リニアセクタアドレス指定)
02h |ESDI HD(リニアセクタアドレス指定)
03h |SASI HD(ESDI I/F接続)(リニアセクタアドレス指定)
04〜07h|NECCD.SYSで使用
10〜13h|両用BIOS - 1MB I/Fモード+640KBアクセスモード
20h |SCSI HD/MO/CD-ROM : SCSI ID=0(リニアセクタアドレス指定)
21h |SCSI HD/MO/CD-ROM : SCSI ID=1(リニアセクタアドレス指定)
22h |SCSI HD/MO/CD-ROM : SCSI ID=2(リニアセクタアドレス指定)
23h |SCSI HD/MO/CD-ROM : SCSI ID=3(リニアセクタアドレス指定)
24h |SCSI HD/MO/CD-ROM : SCSI ID=4(リニアセクタアドレス指定)
25h |SCSI HD/MO/CD-ROM : SCSI ID=5(リニアセクタアドレス指定)
26h |SCSI HD/MO/CD-ROM : SCSI ID=6(リニアセクタアドレス指定)
30〜33h|両用BIOS - 1MB I/Fモード+1.44MBアクセスモード
40h |RAMドライブBIOSイニシャライズ用
50〜53h|320KB FD BIOS
60〜63h|BRANCH 4670仮想ディスク
70〜73h|640KB専用BIOS,両用BIOS - 640KB I/Fモード+640KBアクセスモード
80h |SASI・IDE HD #1(絶対セクタアドレス指定)
81h |SASI・IDE HD/CD-ROM #2(絶対セクタアドレス指定)
82h |ESDI HD(絶対セクタアドレス指定)
83h |SASI HD(ESDI I/F接続)(絶対セクタアドレス指定)
84〜87h|NECCD.SYSで使用
90〜93h|1MB専用BIOS,両用BIOS - 1MB I/Fモード+1MBアクセスモード
A0h |SCSI HD/MO/CD-ROM : SCSI ID=0(絶対セクタアドレス指定)
A1h |SCSI HD/MO/CD-ROM : SCSI ID=1(絶対セクタアドレス指定)
A2h |SCSI HD/MO/CD-ROM : SCSI ID=2(絶対セクタアドレス指定)
A3h |SCSI HD/MO/CD-ROM : SCSI ID=3(絶対セクタアドレス指定)
A4h |SCSI HD/MO/CD-ROM : SCSI ID=4(絶対セクタアドレス指定)
A5h |SCSI HD/MO/CD-ROM : SCSI ID=5(絶対セクタアドレス指定)
A6h |SCSI HD/MO/CD-ROM : SCSI ID=6(絶対セクタアドレス指定)
B0〜B3h|両用BIOS - 1MB I/Fモード+1.44MBアクセスモード(Undocumented)
C0h |SCSI DEVICE: SCSI ID=0
C1h |SCSI DEVICE: SCSI ID=1
C2h |SCSI DEVICE: SCSI ID=2
C3h |SCSI DEVICE: SCSI ID=3
C4h |SCSI DEVICE: SCSI ID=4
C5h |SCSI DEVICE: SCSI ID=5
C6h |SCSI DEVICE: SCSI ID=6
D0h |ROMドライブ(DISK BIOSでのアクセスは不可)
D1h |PCMCIAメモリカード(DISK BIOSでのアクセスは不可)
E0h |RAMDISK.SYS
F0〜F3h|両用BIOS - 640KB I/Fモード+1MBアクセスモード
-------+---------------------------------------------------------------
■リターンコード一覧
---------------+---+------------------------------------
AH |CF |内容
---------------+---+------------------------------------
0000xxxxb(00h) | 0 | Normal End
00001xxxb(08h) | 0 | Corrected Data
0001xxxxb(10h) | 0 | Control Mark
0010xxxxb(20h) | 1 | DMA Boundary
00111xxxb(38h) | 1 | Illegal Disk Address
0100xxxxb(40h) | 1 | Equipment Check
0101xxxxb(50h) | 1 | Over Run
0110xxxxb(60h) | 1 | Not Ready
1110xxxxb(70h) | 1 | Not Writable
10001xxxb(88h) | 1 | Direct Access an Alternate Track
1001xxxxb(90h) | 1 | Time Out
1010xxxxb(A0h) | 1 | Data Error (ID)
1011xxxxb(B0h) | 1 | Data Error (Data)
10111xxxb(B8h) | 1 | Data Error
1100xxxxb(C0h) | 1 | No Data
11001xxxb(C8h) | 1 | Seek Error
11011xxxb(D8h) | 1 | Unreadable Alternate Track
1110xxxxb(E0h) | 1 | Missing Address Mark (ID)
1111xxxxb(F0h) | 1 | Missing Address Mark (Data)
---------------+---+------------------------------------
INT 1Bh - Function 00h(SASI)
分類 SASI BIOS
名前 指定シリンダへのシーク
Undocumented
対象 SASI(PC-9801VX4以降のノーマル内蔵型)
入力 AH=x0h(xは任意)
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI |リニアセクタアドレス |00h,01h
SASI |絶対セクタアドレス |80h,81h
------------+----------------------+-----------
■リニアセクタアドレス指定時
DX:CX=リニアセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=シリンダ番号(0〜)
DH=ヘッド番号(0〜)
DL=00h
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
10h(CF=0)|Control Mark
|一定時間以内にシークが完了しなかった
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
90h(CF=1)|Time Out
|デバイスが接続されていない
---------+------------------------------------------
解説 o 指定されたセクタの存在するシリンダにヘッドをシークさせる。
o このファンクションは、PC-9801VX4以降のノーマルモード内蔵型
SASI BIOSにのみ存在する。PC-9801-27、SCSI・ESDI・IDE BIOS、
ハイレゾモードのSASI BIOS等には存在しない。
関連
INT 1Bh - Function B0h(SCSI)
分類 DISK BIOS
名前 WD33C93へのコマンド送信
Undocumented
対象 SCSI(PC-9801-55初代を除く)
入力 AH=D0h
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
DS:SI=WD33C93に送信するコマンドを格納したメモリの先頭アドレス
DX =WD33C93に送信するコマンドのサイズ(単位:バイト)
ES:BP=SCSI機器との送受信バッファの先頭アドレス
BX =SCSI機器との送受信バッファのサイズ(単位:バイト)
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o SCSI I/F上のWD33C93(SCSIコントローラ)にコマンドを送り、データを
送受信する。
o DS:SI(ES:BP)とDX(BX)は、指定領域が物理アドレスの64Kバイトの境界を
跨がないように設定する必要がある。たとえば、DS:SI=7000:FF00h, DX=0400h
のような領域を指定することはできない。
関連
INT 1Bh - Function D0h(IDE)
分類 DISK BIOS
名前 モータ状態取得の準備
Undocumented
対象 IDE
入力 AH=D0h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
IDE |00h,01h,80h,81h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o IDE HDにPowerCommand(E5hモータ状態のセンス)を送る。
結果は出力レジスタには反映されない。
o このファンクションを実行した直後に、I/O 0644h(SectorCount)から
読み出しを行なうと、IDE HDのモータ回転状態が返される。
-------------+--------------------------------
I/O 0644hの値|モータの状態
-------------+--------------------------------
FFh |モータ回転中
00h |モータ停止中
BBh |パワーロック(PC-9800では使用していない)
-------------+--------------------------------
関連 INT 1Bh - Function E0h(IDE)
INT 1Bh - Function F0h(IDE)
0000:0457h
I/O 0644h
INT 1Bh - Function E0h(IDE)
分類 DISK BIOS
名前 MOTOR ON
Undocumented
対象 IDE
入力 AH=E0h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
IDE |00h,01h,80h,81h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o IDE HDのスピンドルモータをONする。
o このファンクションを実行しなくても、ハードディスクにアクセスする
ファンクションを実行すれば、モータは自動的にONになる。ただし、
READY状態になるまで通常4〜5秒かかる。
関連 INT 1Bh - Function D0h(IDE)
INT 1Bh - Function F0h(IDE)
INT 17h(外部割り込み…IDE)
0000:0457h
INT 1Bh - Function F0h(IDE)
分類 DISK BIOS
名前 MOTOR OFF
Undocumented
対象 IDE
入力 AH=F0h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
IDE |00h,01h,80h,81h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o IDE HDのスピンドルモータをOFFする。
o ハードディスクにアクセスするファンクションを実行すると、モータは
自動的にONになる。ただし、READY状態になるまで通常4〜5秒かかる。
関連 INT 1Bh - Function D0h(IDE)
INT 1Bh - Function E0h(IDE)
INT 1Fh - Function 9A07h
INT 17h(外部割り込み…IDE)
0000:0457h
INT 1Bh - Function 01h(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 ベリファイ(VERIFY)
対象 SASI, SCSI, ESDI, IDE
入力 AH=
■[SASI・ESDI・IDE]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=0001b
■[SCSI]
bit 7=0
bit 6=e
1=エラーセクタ通知あり
0=エラーセクタ通知なし
bit 5,4=00b
bit 3〜0=0001b
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |リニアセクタアドレス |00h,01h,03h
SASI・IDE |絶対セクタアドレス |80h,81h,83h
ESDI |リニアセクタアドレス |02h
ESDI |絶対セクタアドレス |82h
SCSI |リニアセクタアドレス |20〜26h
SCSI |絶対セクタアドレス |A0〜A6h
------------+----------------------+-----------
BX=転送バイト数
■リニアセクタアドレス指定時
DX:CX=リニアセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=シリンダ番号(0〜)
DH=ヘッド番号(0〜)
DL=セクタ番号(0〜)
ES:BP=転送アドレス
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき
DX,CX=エラーセクタアドレス
解説 o 指定されたセクタを読み取り、リターンコードを返す。
u メモリへの転送は行わないが、INT 1Bh - Function 06h(SASI/SCSI/ESDI/IDE)
と同じように入力パラメータのチェックが行われるので、以下の条件を
守らなければエラーになる。
o ES:BP(転送アドレス)とBX(転送バイト数)は、指定領域が物理アドレスの
64Kバイトの境界を跨がないように設定する必要がある。たとえば、
ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。
これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。
o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。
セクタ長で割り切れない値を指定すると、端数は切り捨てられる。
u BX(転送バイト数)に0000hを指定すると、64Kバイトのリードを
行う。(Undocumented)
ただし、リードを行わずに異常終了するBIOSもある模様。
u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング
する。SCSI BIOSはリードせずに正常終了する。IDE BIOSは64Kバイトリード
する。
o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート
している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6
(SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する
場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この
ビットが0のときは、従来互換のダイレクトモードである。
ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、
インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する
ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ
上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの
アドレスを指定する。
インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに
戻される。
関連 INT 1Bh - Function 02h(SCSI)
0000:0590h
INT 1Bh - Function 02h(SCSI)
分類 DISK BIOS
名前 データの書き込みとベリファイ (WRITE&VERIFY)
対象 SCSI
入力 AH bit 7=0
bit 6=e
1=エラーセクタ通知あり
0=エラーセクタ通知なし
bit 5,4=00b
bit 3〜0=0010b
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SCSI |リニアセクタアドレス |20〜26h
SCSI |絶対セクタアドレス |A0〜A6h
------------+----------------------+-----------
BX=転送バイト数
■リニアセクタアドレス指定時
DX:CX=リニアセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=シリンダ番号(0〜)
DH=ヘッド番号(0〜)
DL=セクタ番号(0〜)
ES:BP=転送アドレス
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
■AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき
DX,CX=エラーセクタアドレス
解説 o 指定されたセクタにデータを書き込んだあと、ベリファイを行う。
リニアセクタアドレス指定を用いれば、MOへの書き込みも行える。
o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの
64Kバイトの境界を跨がないように設定する必要がある。たとえば、
ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。
u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを
跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。
o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。
セクタ長で割り切れない値を指定すると、端数は切り捨てられる。
u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を
行う。(Undocumented)
ただし、転送を行わずに異常終了するBIOSもある模様。
u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SCSI BIOSは転送せずに
正常終了する。
o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート
している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6
(SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する
場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この
ビットが0のときは、従来互換のダイレクトモードである。
ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、
インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する
ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ
上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの
アドレスを指定する。
インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに
戻される。
関連 INT 1Bh - Function 01h(SASI/SCSI/ESDI/IDE)
INT 1Bh - Function 05h(SASI/SCSI/ESDI/IDE)
INT 1Bh - Function 03h(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 初期化 (INITIALIZE)
対象 SASI, SCSI, ESDI, IDE
入力 AH=03h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値(xは任意)
------------+-----------
SASI・IDE |0xh,8xh
ESDI |0xh,8xh
SCSI |2xh,Axh
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o コントローラ、ワークエリア等の初期化を行う。
システム起動時には、すでに初期化されている。
u ハードディスクの接続状況を調べ、システム共通域に登録する。
関連 0000:0460h
0000:0482h
0000:055Ch
INT 1Bh - Function 04h(SASI/ESDI/IDE)
分類 DISK BIOS
名前 センス (SENSE)
対象 SASI, ESDI, IDE
入力 AH=04h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SASI・IDE |00h,01h,03h,80h,81h,83h
ESDI |02h,82h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
0xh(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
60h(CF=1)|Not Ready
|デバイスが接続されていない■[ESDI]
90h(CF=1)|Time Out
|デバイスが接続されていない■[SASI]
---------+------------------------------------------
■AH=0xhのとき
AH bit 3〜0=容量
0h: 5Mバイト
1h: 10Mバイト
2h: 15Mバイト
3h: 20Mバイト
4h: 25Mバイト
5h: 40Mバイト
9h: ESDI 100Mバイト
Fh: IDE 80Mバイト以上
解説 o ハードディスクの容量を取得する。
u AHに返される容量を示す値は、INT 1Bh - Function 84h(SASI)の
AHと異なるので注意。また、テクニカルデータブックの記述は実機での
実行結果と一致しない。
u ドライブが接続されていないとき、SASIとESDIはリターンコードで
エラーを返す。IDEは常に正常終了する。
o ハードディスクの接続状況はシステム共通域(0000:055Ch bit 11〜8)に
示されている。
関連 INT 1Bh - Function 84h(SASI)
0000:055Ch bit 11〜8
INT 1Bh - Function 04h(SCSI)
分類 DISK BIOS
名前 レディ状態のセンス
Undocumented
対象 SCSI(PC-9801-55初代を除く)
入力 AH=04h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|デバイスはReady状態
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
6xh(CF=1)|Not Ready
|デバイスはNot Ready状態(MOやCD-ROMでディスクが
|セットされていないときなど)
90h(CF=1)|Time Out
|デバイスが接続されていない
---------+------------------------------------------
解説 o ロジカルユニットの使用可否状態(レディ状態)をテストする。
o ハードディスクの接続状況は、システム共通域(0000:0482h)に示されている。
関連 INT 1Bh - Function 84h(SCSI)
0000:0482h
INT 1Bh - Function 14h(SCSI)
分類 DISK BIOS
名前 デバイスタイプの取得
Undocumented
対象 SCSI(PC-9801-55初代を除く)
入力 AH=14h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
90h(CF=1)|Time Out
|デバイスが接続されていない
---------+------------------------------------------
■AH=00hのとき
BH bit 7 = RMB(Removable)
1=交換可能媒体
0=交換不能媒体
BH bit 6〜0= Device Type Modifier
BL bit 7,6= Peripheral Qualifier
BL bit 5〜0= デバイスタイプ値
------+--------------
BLの値|意味
------+--------------
00h |ハードディスク
01h |テープユニット
05h |CD-ROM
07h |3.5"MO
84h |5"MO
------+--------------
解説 o SCSIデバイスにINQUIRYコマンドを発行して、デバイスの属性を得る。
INQUIRYデータの先頭2バイトをBXレジスタに返す。
関連 0000:0460h
INT DCh - Function 09h Subfunction 0000h
INT 1Bh - Function 24h(SCSI)
分類 DISK BIOS
名前 パラメータテーブルの設定
Undocumented
対象 SCSI(PC-9801-55初代を除く)
入力 AH=24h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
BX=セクタ長
CX=シリンダ数
DH=ヘッド数
DL=セクタ数/トラック
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o SCSIデバイスの諸元をシステム共通域(0000:0460〜047Fh)にセットする。
指定された諸元をシステム共通域に設定するだけなので、ドライブが接続
されていない場合でも必ず正常終了する。
o INT 1Bh - Function 84h(SCSI)で取得できる諸元は、
このファンクションでセットした値である。
o INT 1Bh - Function 44h(SCSI)で取得できるセクタの種類は、必ず
ソフトセクタに設定される。
u BX=0000hで実行するとハングする。
関連 0000:0460h
INT 1Bh - Function 84h(SCSI)
INT 1Bh - Function 44h(SCSI)
分類 DISK BIOS
名前 センス2(SENSE2)
対象 SCSI
入力 AH=44h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
■AH=00hのとき
BX=セクタの種類
0002h: ハードセクタ
0001h: ソフトセクタ
解説 o ディスクのセクタの種類を返す。
o システム共通域を参照してその結果を返すだけなので、ドライブが接続
されていない場合でも必ず正常終了する。
関連 0000:0460h
INT 1Bh - Function 54h(ESDI)
分類 DISK BIOS
名前 NESAスロット取得
Undocumented
対象 ESDI
入力 AH=54h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
------------+-----------
BX=0000h
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
■AH=00hのとき
CH=製品コード
ESDI HD=02h
CL=論理スロット番号
HDC専用スロット=06h
解説 o HDCが実装されているスロット番号等を取得する。
関連 INT 1Fh - Function C0h
INT 1Bh - Function 84h(SASI/ESDI/IDE)
分類 DISK BIOS
名前 新センス
対象 SASI(PC-9801-27を除く), ESDI, IDE
入力 AH=84h
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |リニアセクタアドレス |00h,01h,03h
SASI・IDE |絶対セクタアドレス |80h,81h,83h
ESDI |リニアセクタアドレス |02h
ESDI |絶対セクタアドレス |82h
------------+----------------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
0xh(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
60h(CF=1)|Not Ready
|デバイスが接続されていない■[ESDI]
90h(CF=1)|Time Out
|デバイスが接続されていない■[SASI]
---------+------------------------------------------
■AH=0xhのとき
AH bit 3〜0=容量
00h: 5Mバイト
01h: 10Mバイト
02h: 15Mバイト
03h: 20Mバイト
05h: 25Mバイト
07h: 40Mバイト
09h: ESDI 100Mバイト
0Fh: IDE 80Mバイト以上
BX=セクタ長
0100h: 256バイト
0200h: 512バイト
CX=シリンダ数-1
DH=ヘッド数
DL=セクタ数
解説 o ディスクの諸元を取得する。
u AHに返される容量を示す値は、INT 1Bh - Function 04h(SASI/ESDI/IDE)の
AHと異なるので注意。また、テクニカルデータブックの記述は実機での
実行結果と一致しない。
CXにセットされる値は、テクニカルデータブックの記述とは異なり
シリンダ数-1。
u ドライブが接続されていないとき、SASIとESDIはリターンコードで
エラーを返す。IDEは常に正常終了する。
u PC-9801-27(5インチ固定ディスクインターフェースボード)上のBIOS、
PC-9801-07(5インチ固定ディスクインターフェースボード)をサポート
するBIOSは、このファンクションをサポートしていない(PC-9801F3・M3・VM4
の内蔵型SASI BIOSは、これらの互換BIOSなので同様)。
ただし、MS-DOS 3.1(PS98-011)以降のMS-DOS環境下では、MS-DOSが
このファンクションをトラップし、エミュレートしている。このとき、
0000:0480h bit 7=1になる。
u ハイレゾモードのSASI BIOS(本体F800hセグメント内)、PC-9801VX4以降の
内蔵型SASI BIOS、ESDI BIOS、IDE BIOSは、このファンクションをサポート
している。
u このファンクションのサポートの有無は、以下のようにして判断する。
1. ハイレゾモードは、必ずサポートしている。
2. ノーマルモードでは、0000:0480h bit 7=1のとき、このファンクションが
使用できる。
3. ESDI BIOS(DA/UA=02h,03h,82h,83h)は、必ずサポートしている
(0000:0480h bit 7は0)。
関連 INT 1Bh - Function 04h(SASI/ESDI/IDE)
0000:0480h bit 7
INT 1Bh - Function 84h(SCSI)
分類 DISK BIOS
名前 新センス
対象 SCSI
入力 AH=84h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
■AH=00hのとき
BX=セクタ長
0100h: 256バイト
0200h: 512バイト
0400h: 1024バイト
CX=シリンダ数-1
DH=ヘッド数
DL=セクタ数(1トラックあたり)
解説 o ディスクの諸元を取得する。
u CXにセットされるシリンダ数は、SCSIインタフェーステクニカルブックの
記述とは異なり、シリンダ数-1。
u システム共通域のパラメータテーブルを参照してその結果を返すだけなので、
ドライブが接続されていない場合でも必ず正常終了する。
u ハードディスク以外の装置の諸元を取得することはできない。ハードディスク
以外の装置の場合、システム共通域のパラメータテーブル(0000:0460h)には、
デバイスタイプ値などが格納されている。このファンクションを実行すると、
その内容をハードディスクの諸元と同じように解釈して意味のない値を返す
だけである。
u 3.5"MO、5"MOが接続されている場合、SCSI BIOSはシステム共通域の
パラメータテーブル(0000:0460h)にデバイスタイプ値を格納する。
ところが、MS-DOS 5.0はこのパラメータテーブルをMOの諸元にあわせて
書き換える。このため、MS-DOS 5.0環境下ではMOの諸元が得られる。
u このファンクションで得られる諸元は、必ずしもハードディスクの物理的な
構造と一致しているとは限らない。
関連 0000:0460h
INT 1Bh - Function 05h(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 データの書き込み (WRITE DATA)
対象 SASI, SCSI, ESDI, IDE
入力 AH=
■[SASI・ESDI・IDE]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=0101b
■[SCSI]
bit 7=0
bit 6=e
1=エラーセクタ通知あり
0=エラーセクタ通知なし
bit 5,4=00b
bit 3〜0=0101b
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |リニアセクタアドレス |00h,01h,03h
SASI・IDE |絶対セクタアドレス |80h,81h,83h
ESDI |リニアセクタアドレス |02h
ESDI |絶対セクタアドレス |82h
SCSI |リニアセクタアドレス |20〜26h
SCSI |絶対セクタアドレス |A0〜A6h
------------+----------------------+-----------
BX=転送バイト数
■リニアセクタアドレス指定時
DX:CX=リニアセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=シリンダ番号(0〜)
DH=ヘッド番号(0〜)
DL=セクタ番号(0〜)
ES:BP=転送アドレス
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき
DX,CX=エラーセクタアドレス
解説 o 指定されたセクタにデータを書き込む。
リニアセクタアドレス指定を用いれば、MOへの書き込みも行える。
o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの
64Kバイトの境界を跨がないように設定する必要がある。たとえば、
ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。
これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。
u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを
跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。
o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。
セクタ長で割り切れない値を指定すると、端数は切り捨てられる。
u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を
行う。(Undocumented)
ただし、転送を行わずに異常終了するBIOSもある模様。
u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング
する。SCSI BIOSは転送せずに正常終了する。IDE BIOSは64Kバイト転送する
が、DMAバウンダリのチェックをしない。転送領域がセグメントを跨いで
いると、セグメント内でラップアラウンドが起きるので注意が必要。
o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート
している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6
(SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する
場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この
ビットが0のときは、従来互換のダイレクトモードである。
ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、
インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する
ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ
上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの
アドレスを指定する。
インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに
戻される。
関連 INT 1Bh - Function 02h(SCSI)
INT 1Bh - Function 06h(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 データの読み出し (READ DATA)
対象 SASI, SCSI, ESDI, IDE
入力 AH=
■[SASI・ESDI・IDE]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=0110b
■[SCSI]
bit 7=0
bit 6=e
1=エラーセクタ通知あり
0=エラーセクタ通知なし
bit 5,4=00b
bit 3〜0=0110b
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |リニアセクタアドレス |00h,01h,03h
SASI・IDE |絶対セクタアドレス |80h,81h,83h
ESDI |リニアセクタアドレス |02h
ESDI |絶対セクタアドレス |82h
SCSI |リニアセクタアドレス |20〜26h
SCSI |絶対セクタアドレス |A0〜A6h
------------+----------------------+-----------
BX=転送バイト数
■リニアセクタアドレス指定時
DX:CX=リニアセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=シリンダ番号(0〜)
DH=ヘッド番号(0〜)
DL=セクタ番号(0〜)
ES:BP=転送アドレス
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
■[SCSI] AH bit 6=1(エラーセクタ通知あり)でエラー発生のとき
DX,CX=エラーセクタアドレス
解説 o 指定されたセクタからデータを読み込む。
リニアセクタアドレス指定を用いれば、MOやCD-ROM(SCSI)からの読み込みも
行える。ただし、IDE CD-ROMからの読み込みは、INT 1Bh - Function 16h
(IDE CD-ROM)を利用する。
o ES:BP(転送アドレス)とBX(転送バイト数)は、転送領域が物理アドレスの
64Kバイトの境界を跨がないように設定する必要がある。たとえば、
ES:BP=7000:FF00h, BX=0400hのような領域を指定することはできない。
これに反したとき、SASI・ESDI・IDE BIOSではDMAバウンダリエラーが起きる。
u SCSI BIOSはDMAバウンダリのチェックをしていない。転送領域がセグメントを
跨いでいると、セグメント内でラップアラウンドが起きるので注意が必要。
o BX(転送バイト数)には、セクタ長の整数倍を指定しなければならない。
セクタ長で割り切れない値を指定すると、端数は切り捨てられる。
u BX(転送バイト数)に0000hを指定すると、64Kバイトの転送を
行う。(Undocumented)
ただし、転送を行わずに異常終了するBIOSもある模様。
u BX(転送バイト数)に1〜セクタ長-1を指定した場合、SASI・ESDI BIOSはハング
する。SCSI BIOSは転送せずに正常終了する。IDE BIOSは64Kバイト転送する
が、DMAバウンダリのチェックをしない。転送領域がセグメントを跨いで
いると、セグメント内でラップアラウンドが起きるので注意が必要。
o PC-H98は、1Mバイト超の領域に転送可能なインダイレクトモードをサポート
している。インダイレクトモードが使用可能かどうかは0000:0590h bit 6
(SASI・ESDI), bit 4(SCSI)で判断できる。インダイレクトモードを指定する
場合は、0000:0590h bit 7(SASI・ESDI), bit 5(SCSI)を1にする。この
ビットが0のときは、従来互換のダイレクトモードである。
ダイレクトモードでは、直接ES:BPで転送アドレスを指定するが、
インダイレクトモードのときは、ES:BPで間接的に転送アドレスを指定する
ようになる。すなわち、転送アドレスは32ビットのリニアアドレスでメモリ
上に書き込む。ES:BPで、32ビットのリニアアドレスが書き込まれたメモリの
アドレスを指定する。
インダイレクトモードで一度BIOSを実行すると、必ずダイレクトモードに
戻される。
関連 INT 1Bh - Function 16h(IDE CD-ROM)
INT 1Bh - Function 07h(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 シリンダ0へシークする (RECALIBRATE)
対象 SASI, SCSI, ESDI, IDE
入力 AH=
■[SASI・ESDI・IDE]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=0111b
■[SCSI]
07h
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |リニアセクタアドレス |00h,01h,03h
SASI・IDE |絶対セクタアドレス |80h,81h,83h
ESDI |リニアセクタアドレス |02h
ESDI |絶対セクタアドレス |82h
SCSI |リニアセクタアドレス |20〜26h
SCSI |絶対セクタアドレス |A0〜A6h
------------+----------------------+-----------
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
解説 o シリンダ0にシークする。
関連
INT 1Bh - Function 08h(IDE)
分類 DISK BIOS
名前 HD CACHE制御
Undocumented
対象 IDE(PC-9821Ap2・As2・Bf・Bp・Bs・Be・Cs2・Ce2・Ts, PC-9801BX2・BS2・BA2)
入力 AH=08h
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
IDE |00h,01h,80h,81h
------------+-----------
DL=キャッシング状態
00h=キャッシュOFF
01h=キャッシュON
FFh=キャッシュ状態取得
出力 AH=出力ステータス
DL=キャッシング状態
00h=キャッシュOFF
01h=キャッシュON
解説 o キャッシュ状態をコントロールする。
関連
INT 1Bh - Function 08h(SASI)
分類 DISK BIOS
名前 代替トラックの指定 (ASSIGN ALTERNATE TRACK)
対象 SASI
入力 AH=08h
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI |リニアセクタアドレス |00h,01h
SASI |絶対セクタアドレス |80h,81h
------------+----------------------+-----------
BX=04h(バッファ長)
■リニアセクタアドレス指定時
DX:CX=代替トラック上のセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=代替トラックのシリンダ番号(0〜)
DH=代替トラックのヘッド番号(0〜)
DL=00h
ES:BP=代替トラックアドレスを格納する4バイトのバッファアドレス
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o INT 1Bh - Function 0Bh(SASI)とペアで、代替トラックの割り当て処理に
使用する。
ハードディスクコントローラに代替トラックアドレスを通知する。
u '86年版テクニカルデータブックにのみこのファンクションの解説が
掲載されている。
関連 INT 1Bh - Function 0Bh(SASI)
INT 1Bh - Function 09h(SCSI/ESDI)
分類 DISK BIOS
名前 トラック/セクタの代替処理 (REASSIGN BLOCKS)
対象 SCSI, ESDI
入力 AH=
■[SCSI]
AH=09h
■[ESDI]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=1001b
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
BX=DEFECT LISTバッファのバイト数
ES:BP=DEFECT LISTバッファの先頭アドレス
<DEFECT LISTの形式>
----------------+-------------------------
アドレス |内容
----------------+-------------------------
ES:BP+00h(WORD) |0000h
ES:BP+02h(WORD) |不良セクタ情報の数×4
ES:BP+04h(DWORD)|不良セクタの論理アドレス1
: | :
ES:BP+xxh(DWORD)|不良セクタの論理アドレスn
----------------+-------------------------
* 不良セクタの論理アドレスは昇順に格納する
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない,
|指定されたデバイスは存在しない
98h(CF=1)|Defect List Error
|DEFECT LISTの読み込み中にエラーが起こった
A8h(CF=1)|No Defect Spare Location
|代替領域がなくなったため、代替処理ができない
---------+------------------------------------------
解説 o 不良トラックに代替トラックを割り当てる。
o SCSI HDの場合、ソフトセクタのディスクではトラック単位で、
ハードセクタのディスクではセクタ単位で代替が行われる。
関連 INT 1Bh - Function 0Ch(SCSI/ESDI)
INT 1Bh - Function 8Ch(SCSI/ESDI)
INT 1Bh - Function 0Ah(SCSI/ESDI)
分類 DISK BIOS
名前 セクタ長の指定 (SET SECTOR)
対象 SCSI,ESDI
入力 AH=0Ah
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
BH=セクタ長
01h= 256バイト(SCSI, ESDI 40MB, ESDI 100MB)
02h= 512バイト(SCSI, ESDI 40MB)
04h=1024バイト(SCSI)
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
|指定されたデバイスは存在しない
|不正なセクタ長が指定された
---------+------------------------------------------
解説 o INT 1Bh - Function 0Dh(SCSI/ESDI)でフォーマットするときの
セクタ長を指定する。
関連 INT 1Bh - Function 0Dh(SCSI/ESDI)
INT 1Bh - Function 0Bh(SASI)
分類 DISK BIOS
名前 不良トラックに代替トラック割当 (FORMAT BAD TRACK)
対象 SASI
入力 AH=0Bh
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI |リニアセクタアドレス |00h,01h
SASI |絶対セクタアドレス |80h,81h
------------+----------------------+-----------
BX=04h(バッファ長)
■リニアセクタアドレス指定時
DX:CX=不良トラック上のセクタアドレス(0〜)
■絶対セクタアドレス指定時
CX=不良トラックのシリンダ番号(0〜)
DH=不良トラックのヘッド番号(0〜)
DL=00h
ES:BP=代替トラックアドレスが格納されているバッファアドレス
* 直前にINT 1Bh - Function 08h(SASI)を実行したときと同じアドレス
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
解説 o INT 1Bh - Function 08h(SASI)とペアで、代替トラックの割り当て処理に
使用する。
不良トラックに代替トラックを割り当てる。
u '86年版テクニカルデータブックにのみこのファンクションの解説が
掲載されている。
関連 INT 1Bh - Function 08h(SASI)
INT 1Bh - Function 0Ch(SCSI/ESDI)
分類 DISK BIOS
名前 不良セクタリストの取得 (READ DEFECT DATA)
対象 SCSI, ESDI
入力 AH=
■[SCSI]
AH=0Ch
■[ESDI]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=1100b
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
BX=DEFECT LISTバッファのバイト数
ES:BP=DEFECT LISTバッファの先頭アドレス
* DEFECT LISTの形式は、INT 1Bh - Function 09h(SCSI/ESDI)と同じ
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない,
|指定されたデバイスは存在しない
98h(CF=1)|Defect List Error
|DEFECT LISTの読み込み中にエラーが起こった
---------+------------------------------------------
解説 o BX(DEFECT LISTバッファのバイト数)は、INT 1Bh - Function 8Ch(SCSI/ESDI)
を実行してCXに返される値から計算する。バッファの大きさはCX×4+4バイト
必要。
関連 INT 1Bh - Function 09h(SCSI/ESDI)
INT 1Bh - Function 8Ch(SCSI/ESDI)
INT 1Bh - Function 8Ch(SCSI/ESDI)
分類 DISK BIOS
名前 不良セクタ数の取得 (READ DEFECT NUMBER)
対象 SCSI, ESDI
入力 AH=
■[SCSI]
AH=8Ch
■[ESDI]
bit 7,6=10b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=1100b
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない,
|指定されたデバイスは存在しない
98h(CF=1)|Defect List Error
|DEFECT LISTの読み込み中にエラーが起こった
---------+------------------------------------------
CX=代替されている不良セクタの個数
解説 o 代替されている不良セクタの個数を取得する。
関連 INT 1Bh - Function 09h(SCSI/ESDI)
INT 1Bh - Function 0Ch(SCSI/ESDI)
INT 1Bh - Function 0Dh(SASI/IDE)
分類 DISK BIOS
名前 フォーマット(FORMAT TRACK/DRIVE)
対象 SASI, IDE
入力 AH bit 7=フォーマット単位の指定
1: ドライブ単位
0: トラック単位
bit 6=0
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=1101b
AL=DA/UA
------------+----------------------+-----------
デバイス種別|セクタアドレス指定方法|DA/UA値
------------+----------------------+-----------
SASI・IDE |絶対セクタアドレス |80h,81h,83h
------------+----------------------+-----------
BH=インターリーブファクタ(通常は05hを指定)
CX=シリンダ番号(AH bit 7=1のときは0000hを指定)
DH=ヘッド番号 (AH bit 7=1のときは00hを指定)
DL=00h
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
解説 o トラック単位またはドライブ単位でフォーマットを行う。
u IDE HDでは、トラック単位を指定したとき、なにもせずに正常終了する。
ドライブ単位を指定したときは、実際にはフォーマット処理を行わず、
ディスク先頭の16KバイトにE5hを書き込み正常終了する。
関連
INT 1Bh - Function 0Dh(SCSI/ESDI)
分類 DISK BIOS
名前 フォーマット(FORMAT DRIVE/TRACK)
対象 SCSI, ESDI
入力 AH bit 7 =フォーマット単位の指定
1: ドライブ単位
0: トラック単位(指定不可)
bit 6〜4=000b
bit 3〜0=1111b
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 CF=終了条件
1=異常終了
0=正常終了
AH=ステータス情報
解説 o フォーマットを行う。
トラック単位を指定すると、実際にはなにもせずに終了する。
o フォーマットの前にINT 1Bh - Function 0Ah(SCSI/ESDI)で
セクタ長を指定する。
関連 INT 1Bh - Function 0Ah(SCSI/ESDI)
INT 1Bh - Function 0Eh(SASI/ESDI/IDE)
分類 DISK BIOS
名前 モード設定(MODE SET)
Undocumented
対象 SASI, ESDI, IDE(ノーマルモードのみ)
入力 AH bit 7=モード
1: 薄型(ハーフハイト)指定
0: 厚型(フルハイト)指定
bit 6〜0=0001110b
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SASI・IDE |00h,01h,03h,80h,81h,83h
ESDI |02h,82h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない
---------+------------------------------------------
解説 o AH bit 7で指定されたモードにより、システム共通域内のポインタとフラグを
変更する。そのアドレスとビット位置を以下の表に示す。
-------+-----------------+----------------
DA/UA |ポインタの位置 |フラグの位置
-------+-----------------+----------------
80h,00h|0000:05E8h(DWORD)|0000:0481h bit 0
81h,01h|0000:05ECh(DWORD)|0000:0481h bit 1
82h,02h|D000:005Ah(DWORD)|0000:0590h bit 0
83h,03h|D000:005Eh(DWORD)|0000:0590h bit 1
-------+-----------------+----------------
* ESDI HDのポインタは、ESDI BIOSのセグメントに存在する。
o AH bit 7=0(厚型指定)のとき、パラメータテーブルへのポインタを
20MBフルハイトドライブ用に切り替える(パラメータテーブルはHD BIOS内)。
AH bit 7=1(薄型指定)のとき、パラメータテーブルへのポインタを
20MBハーフハイトドライブ用に切り替える(パラメータテーブルはHD BIOS内)。
o フラグは、モードとドライブのセクタ長から、以下の表の通りに設定される。
----------------+---------+------
モード(AH bit 7)|セクタ長 |フラグ
----------------+---------+------
0 |256バイト|0
0 |512バイト|1
1 |256バイト|0
1 |512バイト|0
----------------+---------+------
関連 0000:0481h bit 1,0
0000:0590h bit 1,0
0000:05E8h
0000:05ECh
INT 1Bh - Function 0Fh(SASI/SCSI/ESDI/IDE)
分類 DISK BIOS
名前 リトラクト(RETRACT)
対象 SASI, SCSI, ESDI, IDE
入力 AH=
■[SASI,ESDI,IDE]
bit 7,6=00b
bit 5=r
1=リトライなし
0=8回リトライ
bit 4=0
bit 3〜0=1111b
■[SCSI]
AH=0Fh
AL=DA/UA
------------+-----------
デバイス種別|DA/UA値
------------+-----------
SASI |00h,01h,03h,80h,81h,83h
ESDI |02h,82h
SCSI |20〜26h,A0〜A6h
------------+-----------
出力 AH=リターンコード
---------+------------------------------------------
AH |内容
---------+------------------------------------------
00h(CF=0)|Normal End
|正常終了
40h(CF=1)|Equipment Check
|DAで指定されたBIOSは存在しない,
|指定されたデバイスはリトラクトできない
60h(CF=1)|Not Ready
|デバイスの準備ができていない
90h(CF=1)|Time Out
|デバイスが接続されていない
---------+------------------------------------------
解説 o ヘッドを不使用シリンダに移動する。
o IDE HDでは、なにもせずに正常終了する。
関連